package com.hhf.springboot.manager;


import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.hhf.springboot.model.dto.ai.AiBody;
import com.hhf.springboot.model.dto.ai.AiResponse;
import com.hhf.springboot.model.dto.ai.BodyMessage;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 用于对接 AI 平台
 */
@Service
public class AiManager {

    final String prompt = "你是一个数据分析师和前端开发专家，接下来我会按照以下固定格式给你提供内容：\n" +
            "分析需求：\n" +
            "{数据分析的需求或者目标}\n" +
            "原始数据：\n" +
            "{csv格式的原始数据，用,作为分隔符}\n" +
            "请根据这两部分内容，按照以下指定格式生成内容（此外不要输出任何多余的开头、结尾、注释）\n" +
            "【【【【【\n" +
            "{前端 Echarts V5 的 option 配置对象json代码，合理地将数据进行可视化，不要生成任何多余的内容，比如注释}\n" +
            "【【【【【\n" +
            "{明确的数据分析结论、越详细越好，不要生成多余的注释}";

    final String apiKey = "sk-PktcAlm6HKvztq5X3b98Ca7b8b2a45939d63B6FcB6B659E4";

    /**
     * AI 对话
     *
     * @param message
     * @return
     */
    public String doChat(String message) {

        String url = "https://api.gpt.ge/v1/chat/completions";


        BodyMessage userMessage = new BodyMessage();
        userMessage.setContent(message);
        userMessage.setRole("user");
        BodyMessage systemMessage = new BodyMessage();
        systemMessage.setContent(prompt);
        systemMessage.setRole("system");
        List<BodyMessage> messages = Arrays.asList(userMessage, systemMessage);
        AiBody apifoxModel = new AiBody();
        apifoxModel.setMessages(messages);
        apifoxModel.setModel("gpt-4o");
        apifoxModel.setStream(false);



        String json = JSONUtil.toJsonStr(apifoxModel);
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + apiKey);
        headers.put("Content-Type", "application/json");
        String responseStr = HttpRequest.post(url)
                .header("Content-Type", "application/json")
                .addHeaders(headers)
                .body(json)
                .execute()
                .body();

        AiResponse aiResponse = JSONUtil.toBean(responseStr, AiResponse.class);

        return aiResponse.getChoices().get(0).getMessage().getContent();
    }

}
